home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / shells / kiss-0.11 / kiss-0 / kiss / src / domknod.c < prev    next >
C/C++ Source or Header  |  1995-03-23  |  1KB  |  45 lines

  1. #include "kiss.h"
  2.  
  3. int domknod (Stringstack s)
  4. {
  5.     int
  6.     mode =  S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH,
  7.     major,
  8.     minor;
  9.     
  10.     if ( s.nstr < 3 || getopt (s.nstr, s.str, "h") != -1 )
  11.     error ("Bad commandline.\n"
  12.            "Usage: %s filename b majorno minorno (create block device)\n"
  13.            "   or: %s filename c majorno minorno (create character "
  14.                                 "device)\n"
  15.            "   or: %s filename p                 (create pipe)\n"
  16.            , progname, progname, progname);
  17.  
  18.     if (s.nstr != 3 && s.nstr != 5)
  19.     error ("need 2 or 4 arguments");
  20.  
  21.     if (s.nstr == 3 && ! strcmp (s.str [2], "p"))
  22.     {
  23.     if (mkfifo (s.str [1], mode))
  24.         error ("problem making pipe \"%s\"", s.str [1]);
  25.     return (0);
  26.     }
  27.  
  28.     if (! strcmp (s.str [2], "c"))
  29.     mode |= S_IFCHR;
  30.     else if (! strcmp (s.str [2], "b"))
  31.     mode |= S_IFBLK;
  32.     else
  33.     error ("bad creation parameter \"%s\", [bc] supported", s.str [2]);
  34.  
  35.     if (! sscanf (s.str [3], "%d", &major))
  36.     error ("bad major number \"%s\"", s.str [3]);
  37.     if (! sscanf (s.str [4], "%d", &minor))
  38.     error ("bad minor number \"%s\"", s.str [4]);
  39.  
  40.     if (mknod (s.str [1], mode, major * 256 + minor))
  41.     error ("problem making device \"%s\"", s.str [1]);
  42.  
  43.     return (0);
  44. }
  45.